Kubernetes(有時稱為 K8s)是一個開源平臺,用于管理和自動化跨機器集群的應用程序容器的部署、調度、監控、維護和操作。由 Google 開發的 Kubernetes 聯網允許管理員跨私有、公共和 混合云 基礎架構移動工作負載。開發人員使用 Kubernetes 將軟件應用程序與其所需的基礎設施打包并快速部署新版本。
Kubernetes 網絡允許 Kubernetes 組件 相互通信以及與其他應用程序通信。Kubernetes 平臺與其他網絡平臺不同,因為它基于扁平的網絡結構,無需將主機端口映射到容器端口。Kubernetes 平臺提供了一種運行分布式系統的方法,在應用程序之間共享機器而無需動態分配端口。
什么是 Kubernetes Pod 網絡?
一個 Kubernetes Pod 網絡連接了幾個相互關聯的組件:
- Pods: Kubernetes Pods 的靈感來自自然界中的豆莢(豌豆莢或鯨魚莢)。Pod 是一組容器,它們共享來自同一節點的網絡和存儲資源。它們由 API 服務器創建并由控制器放置。每個 Pod 都分配有一個 IP 地址,Pod 中的所有容器共享相同的存儲、IP 地址和端口空間(網絡命名空間)。
- 容器:Kubernetes 容器就像一個 虛擬機 ,在多個應用程序之間共享其操作系統 (OS)。它有自己的文件系統、CPU、內存和進程空間。容器總是在 Pod 中創建,一個 Pod 中可以創建多個容器。Pod 中的容器都一起移動,一起調度,一起終止。Pod 可以跨云移動。容器可以通過容器網絡連接到其他容器、主機和外部網絡。
- 節點:Pod 始終在工作節點內運行。節點是運行容器化應用程序的機器。Kubernetes 將這些節點分組到集群中。
- 主節點:每個節點集群將至少有一個管理工作節點的主節點。master 可以與集群中的每個節點通信,也可以直接與任何單個 Pod 通信。
網絡在 Kubernetes 中是如何工作的?
Kubernetes 平臺中的不同組件(Pod、容器、節點、應用程序)使用不同的網絡方式進行通信。有容器到容器的通信、Pod 到 Pod 的通信、Pod 到服務的通信和外部到服務的通信。
Pod 到 Pod 的通信是 Kubernetes 的基礎。Pod 按照網絡插件設置的網絡策略相互通信,與其他 Pod 通信而無需在它們之間顯式創建鏈接或將容器端口映射到主機端口。由于 Pod 共享相同的網絡命名空間并擁有自己的 IP 地址,因此它們可以使用 localhost 找到所有節點上的所有其他 Pod 并與之通信,而無需使用網絡地址轉換 (NAT)。
Kubernetes 網絡的挑戰之一是解決內部(東西向)流量和外部(南北向)流量如何交互,因為內部網絡與外部網絡是隔離的。但是,在節點之間流動的流量也可以在節點和外部物理機或虛擬機之間流動。將外部流量引入 Kubernetes 集群有幾種不同的方法:
- LoadBalancer:LoadBalancer 是將服務從外部連接到 Internet 的標準方式。在這種情況下,網絡負載均衡器將所有外部流量轉發到服務。每個服務都有自己的 IP 地址。
- ClusterIP:ClusterIP 是用于內部通信的默認 Kubernetes 服務。但是,外部流量可以通過代理訪問默認的 Kubernetes ClusterIP 服務。這對于調試服務或顯示內部儀表板很有用。
- NodePort:NodePort 在節點或虛擬機上打開端口,流量從端口轉發到服務。它最常用于并非總是可用的服務,例如演示應用程序。
- Ingress:Ingress 充當路由器或控制器,通過負載均衡器將流量路由到服務。如果您想使用相同的 IP 地址來公開多個服務,這很有用。
Kubernetes 網絡的另一個重要方面是 容器網絡 接口,或 CNI。CNI 跨節點連接 Pod,充當網絡命名空間和網絡插件或網絡提供者和 Kubernetes 網絡之間的接口。有許多不同的 CNI 提供程序和插件可供選擇,它們具有不同的特性和功能集。CNI 插件能夠在配置和銷毀 Pod 時動態配置網絡和資源。他們在創建和刪除容器時提供和管理 IP 地址。Kubernetes 是 Kubernetes 的默認網絡提供商,但 Flannel、Calico、Canal 和 Weave Net 等 CNI 插件提供了額外的功能。
如何實現 Kubernetes 網絡?
網絡管理員可以通過多種不同的方式實現 Kubernetes 網絡模型。Gartner 在其 2019 年數據中心網絡魔力象限報告中將以下 Kubernetes 網絡示例視為“有遠見的” :
- Big Switch Networks 的 Big Cloud Fabric:一種在私有云環境中運行 Kubernetes 的云原生網絡架構。
- Cumulus NetQ:一種基于遙測的結構驗證系統,可提供容器部署的可見性。
- Dell EMC:一個支持傳統應用程序和云原生環境的云平臺,并集成了對 Kubernetes 和容器的支持。
- VMware NSX-T:網絡虛擬化和安全平臺,為多云或多管理程序環境虛擬化網絡,包括本機容器網絡。